package br.com.velp.sudecap.serviceimpl;

import br.com.velp.sudecap.dao.ImovelDecretoDAO;
import br.com.velp.sudecap.entidade.Decreto;
import br.com.velp.sudecap.entidade.Imovel;
import br.com.velp.sudecap.entidade.ImovelDecreto;
import br.com.velp.sudecap.service.ImovelDecretoService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> RF006.03 - Relacionar Decretos x Imóveis </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pelas Operações de 
 *             CRUD Referentes ao Contexto de Imóveis </descricao>
 * </sumario>
 */
@Service("imovelDecretoService")
@Transactional(readOnly = true)
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class ImovelDecretoServiceImpl implements ImovelDecretoService{
    
    @Autowired
    private ImovelDecretoDAO imovelDecretoDAO;

    @Override
    @Transactional(readOnly = false)
    public Long salvar(ImovelDecreto value) throws Exception {
	return this.imovelDecretoDAO.salvar(value);
    }

    @Override
    @Transactional(readOnly = false)
    public void atualizar(ImovelDecreto value) throws Exception {
	this.imovelDecretoDAO.atualizar(value);
    }

    @Override
    public ImovelDecreto obterPorId(Long id) {
	return this.imovelDecretoDAO.obterPorId(id);
    }

    @Override
    @Transactional(readOnly = false)
    public void excluir(ImovelDecreto value) {
	this.imovelDecretoDAO.excluir(value);
    }
    
    @Override
    public List<ImovelDecreto> recuperarImoveisDoDecreto(Long idDecreto){
	return this.imovelDecretoDAO.recuperarImoveisDoDecreto(idDecreto);
    }
    
    @Override
    @Transactional(readOnly = false)
    public void adicionarImoveisAoDecreto(Long idDecreto, List<Imovel> imoveis){
	for(Imovel imovel : imoveis){
	    ImovelDecreto imovelDecreto = new ImovelDecreto();
	    imovelDecreto.setDecreto(new Decreto(idDecreto));
	    imovelDecreto.setImovel(imovel);
	    imovelDecreto.setSituacao(Boolean.TRUE);
	    this.imovelDecretoDAO.salvar(imovelDecreto);
	}
    }
    
    @Override
    @Transactional(readOnly = false)
    public void atualizarStatusImovelDecreto(ImovelDecreto imovelDecreto){
	this.imovelDecretoDAO.atualizar(imovelDecreto);
    }
    
}
